package ar.uba.fi.algo3.tp3.modelo;

import ar.uba.fi.algo3.tp3.controlador.ControladorPacman;
import ar.uba.fi.algo3.tp3.vista.*;

import java.util.Iterator;
import java.util.List;

public class GeneradorElementosDePartida {
    private Mapa mapa;
    private ControladorPacman controladorPacman;

    
    public GeneradorElementosDePartida(Mapa mapa, ControladorPacman controlador) {
        this.controladorPacman  = controlador;
        this.mapa               = mapa;
    }

    public void inicializarPartidaGenerico() {
        this.generarVistaCasaFantasmas();
        this.generarVistaNivel();
        this.generarParedes();
        this.generarPastillas();
        this.generarFantasmas();
        this.generarVistaFruta();
    }

    public void generarParedes() {
        List<Pared> listaP = mapa.getListaParedes();
        Iterator iteradorP = listaP.iterator();
        while (iteradorP.hasNext()) {
            Pared pared = (Pared) iteradorP.next();
            VistaPared vistaPared = new VistaPared();
            vistaPared.setPosicionable(pared);
            controladorPacman.agregarDibujable(vistaPared);
        }
    }

    public void generarPastillas() {
        List<Pastilla> listaPastillas = mapa.getListaPastillas();
        for (Iterator<Pastilla> it = listaPastillas.iterator(); it.hasNext();) {
            Pastilla pastilla = it.next();
            if (pastilla.esPastillaDePoder()) {
                VistaPastillaPower vpp = new VistaPastillaPower();
                vpp.setPosicionable(pastilla);
                controladorPacman.agregarDibujable(vpp);
            } else {
                VistaPastillaComun vpc = new VistaPastillaComun();
                vpc.setPosicionable(pastilla);
                controladorPacman.agregarDibujable(vpc);
            }
        }
    }

    public void generarFantasmas() {
        List<Fantasma> lf = mapa.getListaFantasmas();
        for (Iterator<Fantasma> it = lf.iterator(); it.hasNext();) {
            Fantasma fantasma = it.next();
            VistaFantasma vf = VistaFantasmaFactory.crearVistaFantasma(fantasma);
            vf.setPosicionable(fantasma);
            controladorPacman.agregarObjetoVivo(fantasma);
            controladorPacman.agregarDibujable(vf);
        }
    }

    public void generarVistaPacman(Pacman pacmanParametro) {
        VistaPacman vistaPacman = new VistaPacman();
        vistaPacman.setPosicionable(pacmanParametro);
        controladorPacman.agregarObjetoVivo(pacmanParametro);
        controladorPacman.agregarDibujable(vistaPacman);
    }

    public void generarVistaFruta() {
    	List<Fruta> listaFrutas= mapa.getListaFrutas();
    	for(Iterator<Fruta> it = listaFrutas.iterator(); it.hasNext();) {
    		Fruta f = it.next();
    		VistaFruta vistaFruta = new VistaFruta();
            vistaFruta.setPosicionable(f);
            controladorPacman.agregarObjetoVivo(f);
            controladorPacman.agregarDibujable(vistaFruta);
    	}
    }
    

    public void generarVistaNivel() {
        VistaNivel vistaNivel = new VistaNivel();
        vistaNivel.setPosicionable(mapa);
        controladorPacman.agregarDibujable(vistaNivel);

    }

    public void generarVistaCasaFantasmas() {
        VistaCasaFantasmas vistaCasaFantasmas = new VistaCasaFantasmas();
        vistaCasaFantasmas.setPosicionable(mapa.getCasaFantasmas());
        controladorPacman.agregarDibujable(vistaCasaFantasmas);
    }

}
